/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorSemantico.tablaSimbolos.TablaSimboloSemantico;

/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa un otherwise
 */
public class Otherwise {

//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Atributo que representa un bloque de codigo
	 */
	private BloqueSentencias bloqueSentencias;

	//	-------------------------------------------------------------------------------------------------
//	CONSTRUCTOR
//	-------------------------------------------------------------------------------------------------
	/**
	 * Constructor que permite crear un nuevo otherwise
	 * @param bloqueCodigo
	 */
	public Otherwise(BloqueSentencias bloqueSentencias) {
		super();
		this.bloqueSentencias = bloqueSentencias;
	}

//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Otherwise");
		
		if(bloqueSentencias != null)
			miRaiz.add(bloqueSentencias.getArbolVisual());
		
		return miRaiz;
	}
	
	/**
	 * @return
	 */
	public String getJavaCode() {
		String retornable = "otherwise{\n";
		
		if(bloqueSentencias != null){
			retornable += bloqueSentencias.getJavaCode();
		}
		
		return retornable + "}\n";
	}
	
	/**
	 * @param ts
	 * @param errores
	 * @param claseActual
	 * @param metodoActual
	 */
	public void analizarSemantica(TablaSimboloSemantico ts,
			ArrayList<SimboloError> errores, String claseActual,
			String metodoActual) {
		this.bloqueSentencias.AnalizarSemantica(ts, errores, claseActual, metodoActual);
		
	}
	
//	-------------------------------------------------------------------------------------------------
//	Getters & Setters
//	-------------------------------------------------------------------------------------------------
	/**
	 * Metodo que nos retorna el valor de bloqueSentencias
	 * @return  bloqueSentencias. Valor retornado
	 */
	public BloqueSentencias getBloqueSentencias() {
		return bloqueSentencias;
	}

	/**
	 * Metodo que permite asignar el valor de bloqueSentencias
	 * @param bloqueSentencias. Valor a asignar bloqueSentencias
	 */
	public void setBloqueSentencias(BloqueSentencias bloqueSentencias) {
		this.bloqueSentencias = bloqueSentencias;
	}
}